******** ACIA INTERFACE ******** ******************************** ******************************** *D0 - Loop Counter *D1 - DELAY LOOP COUNTER *D2 - DISPLAY FLAG * $0000 = RAW DATA * $0001 = VOLTAGE *D3 - DATA COUNTER (0 - 255) *D4 - KEYSTROKE INPUT *D5 - OUTPUT CHARACTER *D6 - VOLTAGE REGISTER *A3 - LABLE POINTER *A7 - STACK POINTER ******************************** ******************************** CALL MACRO *TRAP 14 MACRO MOVE.B #\1,D7 TRAP #14 ENDM MAIN EQU $1000 DATA EQU $4000 ORG DATA *SET VARIABLES RAWD DC.B 'RAW A/D Output = ' VOLT DC.B 'A/D VOLTAGE = ' DOUT DS.B 5 ACIAC EQU $10040 *ADDRESS OF CONTROL/STATUS REGISTER ACIAD EQU ACIAC+2 *ADDRESS OF DATA REGISTER RDRF EQU 0 *RECEIVER DATA REGISTER FULL TDRE EQU 1 *TRANSMITTER DATA REGISTER EMPTY ******************************** *********** MAIN *********** ******************************** ORG MAIN LEA.L $7000,A7 ********** INITIALIZE ********** MOVE.L #$0000,D1 *SET DELAY LOOP COUNTER MOVE.L #$0001,D2 *SET FLAG TO RAW DATA MOVE.L #$0000,D3 *SET DATA COUNTER MOVE.L #$0000,D4 *CLEAR KEYSTROKE INPUT MOVE.L #$0000,D5 *CLEAR OUTPUT CHARACTER MOVE.L #$0000,D6 *CLEAR VOLTAGE REGISTER MOVE.B #$03,ACIAC *RESET THE ACIA MOVE.B #$15,ACIAC *SETUP--DISABLE INTERRUPTS-NO PARITY MOVE.B #$0D,D5 *START NEW LINE BSR OUTPUT MOVE.B #$00,D0 *CLEAR LOOP COUNTER MOVE.B #$20,D5 *SPACE(ASCII$20) CLR BSR OUTPUT *DISPLAY SPACE ADDI.B #$01,D0 *INCREMENT LOOP COUNTER CMPI.B #$30,D0 *20 TIMES BNE CLR MOVE.B #$0D,D5 *START NEW LINE BSR OUTPUT MOVE.B #$01,D0 *INITIALIZE LOOP COUNTER LEA.L RAWD,A3 *MOVE ADDRESS OF LABLE TO A3 LPI MOVE.B (A3)+,D5 *MOVE CHARACTER FOR LABLE TO D5 BSR OUTPUT ADDI.B #$01,D0 *INCREMENT LOOP COUNTER CMPI.B #$14,D0 *COMPLETE LOOP 20 TIMES BNE LPI BRA NOINC *GOTO INITIAL DATA DISPLAY W/O INC ******************************** LOOP ADD.L #$0001,D3 *INCREMENT COUNTER CMPI.W #$100,D3 *COMPARE COUNTER VALUE TO &256 BNE NOINC MOVE.L #$0000,D3 *COUNTER = 256 RESET NOINC BSR DELAY *0.2 SEC DELAY BSR DISDAT *DISPLAY DATA BTST.B #RDRF,ACIAC *TEST RECEIVER STATUS BNE GETCH BRA LOOP *NO KEYSTOKE BRA TO LOOP ******************************** ********* SUBROUTINES ********** ******************************** ************* DELAY ************ DELAY MOVE.L #$AFFF,D1 DLOOP SUBI.L #$1,D1 BNE DLOOP *DELAY FOR 0.2 SEC * MOVE.L #$FFFF,D1 *DLP SUBI.L #$1,D1 * BNE DLP RTS ********** GET KEYSTOKE ******** GETCH MOVE.B ACIAD,D4 ANDI.B #$DF,D4 *CONVERT TO ALL CAPS BSR TCHAR *TEST CHAR BRA LOOP ********** DISPLAY DATA ******** DISDAT MOVE.B #$08,D5 *BACKSPACE*3 (ASCII$08) BSR OUTPUT BSR OUTPUT BSR OUTPUT CMPI.B #$01,D2 *CHECK DISPLAY FLAG BEQ VT MOVE.W D3,D0 *MOVE RAW DATA FOR CONVERSION CALL 236 *TRAP#14 HEX2DEC MOVE.B #$03,D0 *INITIALIZE LOOP COUNTER DISCH MOVE.B (A5)+,D5 *OUTPUT CHARACTER BSR OUTPUT SUBI.B #$01,D0 *DECREMENT COUNTER CMP.L A5,A6 *CHECK FOR END OF STRING BNE DISCH DISSP CMPI.B #$00,D0 *CHECK FOR END OF DISPLAY BEQ EX *RETURN IF END OF DISPLAY MOVE.B #$20,D5 *DISPLAY SPACE(ASCII$20) BSR OUTPUT SUBI.B #$01,D0 *DECREMENT COUNTER BRA DISSP EX RTS * MOVE.B (A5)+,D5 *MOVE UDS OF RAW DATA TO D5 * BSR OUTPUT *DISPLAY RAW DATA(UDS) * * MOVE.B (A5),D5 *MOVE LDS OF RAW DATA TO D5 * BSR OUTPUT *DISPLAY RAW DATA(LDS) * * RTS VT MOVE.W D3,D6 *MOVE RAW DATA TO BE CONVERTED CMP.W #$32,D6 BGT VTH MULU.W #$32,D6 DIVU.W #$FF,D6 MOVE.W D6,D0 LEA DOUT,A5 LEA DOUT,A6 CALL 236 MOVE.B #'0',D5 BSR OUTPUT MOVE.B #$2E,D5 BSR OUTPUT MOVE.B (A5),D5 BSR OUTPUT RTS VTH MULU.W #$32,D6 DIVU.W #$FF,D6 MOVE.W D6,D0 *Move voltage for conversion for ASCII LEA DOUT,A5 LEA DOUT,A6 CALL 236 *TRAP#14 HEX2DEC MOVE.B (A5)+,D5 BSR OUTPUT MOVE.B #$2E,D5 BSR OUTPUT MOVE.B (A5),D5 BSR OUTPUT RTS * MULU.W #$1F4,D6 * BRA VD * *VTT MULU.W #$32,D6 * *VD DIVU.W #$FF,D6 * * MULU.W #$32,D6 *CONVERT RAW DATA TO VOLAGE * DIVU.W #$FF,D6 * * * MOVE.W D6,D0 *MOVE VOLTAGE FOR CONVERSION * CALL 236 *TRAP#14 HEX2DEC * * *VTZ MOVE.B #'0',D5 * BSR OUTPUT * * MOVE.B #$2E,D5 *DISPLAY '.' * BSR OUTPUT * * MOVE.B #'0',D5 * BSR OUTPUT * * RTS ******* OUTPUT TO CRT ********** OUTPUT BTST.B #TDRE,ACIAC *TEST TRANSMITTER STATUS BEQ OUTPUT *POLL UNTIL TRANSMITTER READY FOR DATA MOVE.B D5,ACIAD *TRANSMIT THE DATA RTS ********** TEST CHAR *********** TCHAR CMPI.B #'V',D4 *CHAR = 'V'? BNE RD MOVE.L #$0001,D2 *DISPLAY FLAG =1 MOVE.B #$0D,D5 *MOVE TO BEGINNING OF LINE BSR OUTPUT MOVE.B #$01,D0 *INITIALIZE LOOP COUNTER LEA.L VOLT,A3 *MOVE ADDRESS OF LABLE TO A3 LPV MOVE.B (A3)+,D5 *MOVE CHARACTER FOR LABLE TO D5 BSR OUTPUT ADDI.B #$01,D0 *INCREMENT LOOP COUNTER CMPI.B #$14,D0 *COMPLETE LOOP 20 TIMES BNE LPV BSR DISDAT RTS RD CMPI.B #'R',D4 *CHAR = 'R'? BNE CC MOVE.L #$0000,D2 *DISPLAY FLAG = 0 MOVE.B #$0D,D5 *MOVE TO BEGINNING OF LINE BSR OUTPUT MOVE.B #$01,D0 *INITIALIZE LOOP COUNTER LEA.L RAWD,A3 *MOVE ADDRESS OF LABLE TO A3 LPR MOVE.B (A3)+,D5 *MOVE CHARACTER FOR LABLE TO D5 BSR OUTPUT ADDI.B #$01,D0 *INCREMENT LOOP COUNTER CMPI.B #$14,D0 *COMPLETE LOOP 20 TIMES BNE LPR BSR DISDAT RTS CC CMPI.B #'C',D4 *CHAR = 'C'? BNE TR BSR CLRCNT RTS TR CMPI.B #'Q',D4 *CHAR = 'Q'? BNE IK BSR TUTOR IK BRA LOOP *INVALID KEYSTROKE ********** CLEAR COUNTER ******* CLRCNT MOVE.L #$0000,D3 *RESET COUNTER BRA NOINC ********** RETURN TO TUTOR ***** TUTOR CALL 228 *RETURN TO TUTOR END